package dailynewsreader.model;

import java.util.Date;
import java.util.Objects;

/**
 * Ez lesz egy RSS bejegyzés
 *
 * @author Zen
 */
public class RSSEntry {

    /**
     * A bejegyzés címe
     */
    private String title;
    
    /**
     * A feed neve, amely tartalmazza őt
     */
    private String feedTitle;
    
    /**
     * A bejegyzés dátuma
     */
    private Date pubDate;
    /**
     * A bejegyzés linkje
     */
    private String link;
    /**
     * A bejegyzés szerzője
     */
    private String author;
    /**
     * A bejegyzés leírása (taratlma)
     */
    private String description;
    /**
     * Megmondja, hogy olvasott-e már a bejegyzés
     */
    private boolean isRead;

    /**
     * Konstruktor
     */
    public RSSEntry() {
        this.isRead = false;
    }

    /**
     * Lekéri, hogy olvasott-e már a bejegyzés
     *
     * @return Igaz vagy hamis
     */
    public boolean isIsRead() {
        return isRead;
    }

    /**
     * Beállítja, hogy olvasott-e már a bejegyzés
     *
     * @param isRead Igaz vagy hamis
     */
    public void setIsRead(boolean isRead) {
        this.isRead = isRead;
    }

    /**
     * Lekéri a tartalmat
     *
     * @return A tartalom
     */
    public String getDescription() {
        return description;
    }

    /**
     * Beállítja a tartalmat
     *
     * @param description A bejegytzés tartalma
     */
    public void setDescription(String description) {
        this.description = description;
    }
    
    /**
     * Az őt tartalmazó feed címének beállítása
     * @param feedTitle 
     */
    public void setFeedTitle(String feedTitle){
        this.feedTitle = feedTitle;
    }

    /**
     * Lekéri a szerzőt
     *
     * @return A szerző neve
     */
    public String getAuthor() {
        return author;
    }

    /**
     * Beállítja a szerzőt
     *
     * @param author A szerző neve
     */
    public void setAuthor(String author) {
        this.author = author;
    }

    /**
     * Lekéri a linket
     *
     * @return A link címe
     */
    public String getLink() {
        return link;
    }

    /**
     * Beállítja a linket
     *
     * @param link A link címe
     */
    public void setLink(String link) {
        this.link = link;
    }

    /**
     * Lekéri a bejegyzés dátumát
     *
     * @return A bejegyzés dátuma
     */
    public Date getPubDate() {
        return pubDate;
    }

    /**
     * Beállítja a bejegyzés dátumát
     *
     * @param pubDate A bejegyzés dátuma
     */
    public void setPubDate(Date pubDate) {
        this.pubDate = pubDate;
    }

    /**
     * Lekéri a bejegyzés címét
     *
     * @return A bejegyzés címe
     */
    public String getTitle() {
        return title;
    }

    /**
     * Beállítja a bejegyzés címét
     *
     * @param title A bejegyzés címe
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * Összehasonlít két bejegyzést, hogy egyenlőek-e
     *
     * @param obj A bejegyzés, amivel vizsgáljuk
     * @return Igaz vagy Hamis
     */
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof RSSEntry) {
            if (obj.hashCode() == this.hashCode()) {
                return true;
            }
        }
        return false;
    }

    /**
     * A cím, a publikálás dátuma és a szerző szerint legenerálja a hash kódját
     * a bejegyzésnek, ami alapján össze lehet hasonlítani egy másikkal
     *
     * @return A generált hash
     */
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 83 * hash + Objects.hashCode(this.title);
//        hash = 83 * hash + Objects.hashCode(this.pubDate);
//        hash = 83 * hash + Objects.hashCode(this.author);
        hash = 83 * hash + Objects.hashCode(this.link);
        return hash;
    }

    /**
     * A bejegyzést átalakítja szöveggé
     *
     * @return A bejegyzés szöveges reprezentációja
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();

        sb.append("Entry details:\n");
        sb.append("----------------------\n");
        sb.append("Title: " + this.title + "\n");
        sb.append("Link: " + this.link + "\n");
        sb.append("Publish Date: " + this.pubDate + "\n");
        sb.append("Author: " + this.author + "\n");
        sb.append("Description: " + this.description + "\n");

        return sb.toString();
    }
    
    /**
     * Az entry-ket HTML szöveggé konvertálja
     * 
     * @return HTML kód 
     */
    public String toHTML() {
        StringBuilder sb = new StringBuilder();       
            sb.append("<h2><a href=\"" + this.getLink() + "\"/>" + this.getTitle() + "</a></h2>");            
            sb.append("<p>" + this.getDescription() + "</p><br/><span class=\"footer\"");
            if (this.getAuthor().length() > 0)
                sb.append(this.getAuthor() + ", ");
            sb.append("<i>" + this.getPubDate() + "</i></span>");
            sb.append(" - " + this.feedTitle);
        
        return sb.toString();
    }
}
